import fs from 'fs';
import path from 'path';
/*
以下配置都是以在docker生产环境中运行为准。在开发机上请自建config.dev.ts重载之。
*/
export default class Config {
	static getHttpPort = () => 9380;
	static getHttpsPort = () => 9382;
	static getUDPPort = () => 9381;
	static getSyncPort = () => 9383;
	static getGRpcPort = () => 9385;

	static getSyncHeartbeat = () => 1000 * 60 * 5;

	// 获取提供给/check，用来回复客户端的更新服务器。默认是空，此值应从用户自身数据中取。这里留下一个接口，方便开发时提供测试服务器
	static getUpdateServer = () => null;

	// 获取本机redis
	static getRedis() {
		let cfg = process.env.REDIS || 'redis:6379';
		let info = cfg.split(':');
		return { host: info[0], port: parseInt(info[1]) };
	}

	/* 获取远程同步redis。
	对于同步服务器来说，就是连自己，所以在同步服启动配置里会设置SyncRedis为自身
	对于用户服务器来说，默认连主机上的6380，该端口是一个ssh远程转发端口，开新服时由同步服务器主动连到新服上建立转发
	*/
	static getSyncRedis() {
		let cfg = process.env.SyncRedis || 'dockerhost:6380';
		if (!cfg) return this.getRedis();
		let info = cfg.split(':');
		return { host: info[0], port: parseInt(info[1]) };
	}

	/*
	获取在用户服务器上建立的端口转发配置
	在生产环境中，会将用户服6380转到到同步服的redis数据库上，在docker部署中即容器名redis
	*/
	static getUserServerForwardPorts() {
		return [
			{
				remotePort: 6380,
				destHost: 'redis',
				destPort: 6379,
			},
		];
	}

	static getStaticDirectory = () => path.resolve('/build');
}
